// 这个fetch-backend.ts文件是GitDiagram项目中前端与后端API通信的核心模块，
// 主要提供成本估计功能，帮助用户了解生成图表或文档的预估成本。
// 包含与API交互的工具函数，用于获取成本估计和确定后端URL。

// 定义成本API响应的接口类型
interface CostApiResponse {
  error?: string;            // 可能的错误信息
  cost?: string;            // 生成图表或文档的估计成本
}

/**
 * 获取生成图表或文档的成本估计
 * @param username - GitHub用户名
 * @param repo - GitHub仓库名
 * @returns 包含成本估计或错误信息的Promise对象
 */
export async function getCostOfGeneration(
  username: string,
  repo: string,
): Promise<string> {
  try {
    // 从 localStorage 获取最新选择的模型，确保使用正确的端点
    let selectedModel = "openai-o3";
    if (typeof window !== 'undefined') {
      selectedModel = localStorage.getItem("selected_model") || "openai-o3";
      
      // 强制清理模型值，避免可能的空格或其他隐藏字符
      if (selectedModel?.trim() === "deepseek") {
        selectedModel = "deepseek";
      } else {
        selectedModel = "openai-o3"; // 默认使用 OpenAI
      }
    }
    
    // 添加调试信息
    // console.log("Selected model in getCostOfGeneration:", selectedModel);
    // console.log("Type of selectedModel:", typeof selectedModel);
    // console.log("API Key available:", !!localStorage.getItem("api_key"));
    
    // 确定基于所选模型的端点
    const baseUrl = getBackendUrl();
    let endpoint = `${baseUrl}/openai/mermaid/cost`;
    
    // 使用严格相等检查字符串
    const isDeepseek = selectedModel === "deepseek";
    // console.log(`Cost endpoint - Model check: "${selectedModel}" === "deepseek" is ${isDeepseek}`);
    
    if (isDeepseek) {
      // console.log("Using DeepSeek mermaid cost endpoint");
      endpoint = `${baseUrl}/deepseek/mermaid/cost`;
    } else {
      // console.log("Using OpenAI mermaid cost endpoint");
    }
    
    // console.log("Sending request to endpoint:", endpoint);
    
    // 准备请求体，包含所选模型
    const requestBody = {
      username,
      repo,
      model: selectedModel,
      api_key: localStorage.getItem("api_key") ?? undefined,
    };
    
    // console.log("Request body (excluding API key):", {
    //   ...requestBody,
    //   api_key: requestBody.api_key ? "[REDACTED]" : undefined
    // });
    
    const response = await fetch(endpoint, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(requestBody),
    });
    
    const data = await response.json();
    // console.log("Response from cost endpoint:", data);
    
    if (data.error) {
      throw new Error(data.error);
    }
    
    return data.cost;
  } catch (error) {
    // console.error("Error getting cost:", error);
    return "$0.00";
  }
}

// 获取后端API的URL
export function getBackendUrl(): string {
  return process.env.NEXT_PUBLIC_API_DEV_URL ?? "https://api.codemariner.com";
}
